package com.bamboo.tools

import android.app.Activity
import android.content.Context
import android.graphics.Rect
import android.util.DisplayMetrics

object DisplayUtils {
    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    fun dip2px(context: Context, dpValue: Float): Int {
        val scale = context.resources.displayMetrics.density
        return (dpValue * scale + 0.5f).toInt()
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    fun px2dip(context: Context, pxValue: Float): Int {
        val scale = context.resources.displayMetrics.density

        return (pxValue / scale + 0.5f).toInt()
    }

    /**
     * 得到的屏幕的宽度
     */
    fun getWidthPx(activity: Activity): Int {
        // DisplayMetrics 一个描述普通显示信息的结构，例如显示大小、密度、字体尺寸
        val displaysMetrics = DisplayMetrics() // 初始化一个结构
        activity.windowManager.defaultDisplay.getMetrics(displaysMetrics) // 对该结构赋值
        return displaysMetrics.widthPixels
    }

    /**
     * 得到的屏幕的高度
     */
    fun getHeightPx(activity: Activity): Int {
        // DisplayMetrics 一个描述普通显示信息的结构，例如显示大小、密度、字体尺寸
        val displaysMetrics = DisplayMetrics() // 初始化一个结构
        activity.windowManager.defaultDisplay.getMetrics(displaysMetrics) // 对该结构赋值
        return displaysMetrics.heightPixels
    }

    /**
     * 得到屏幕的dpi
     * @param activity
     * @return
     */
    fun getDensityDpi(activity: Activity): Int {
        // DisplayMetrics 一个描述普通显示信息的结构，例如显示大小、密度、字体尺寸
        val displaysMetrics = DisplayMetrics() // 初始化一个结构
        activity.windowManager.defaultDisplay.getMetrics(displaysMetrics) // 对该结构赋值
        return displaysMetrics.densityDpi
    }

    /**
     * 返回状态栏/通知栏的高度
     *
     * @param activity
     * @return
     */
    fun getStatusHeight(activity: Activity): Int {
        val frame = Rect()
        activity.window.decorView.getWindowVisibleDisplayFrame(frame)
        return frame.top
    }
}